﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using Crosland.Automotriz.Core;
using Crosland.Automotriz.Logic.Linq;
using System.Data.SqlTypes;
using System.IO;
using DevExpress.Web.ASPxGridView.Export;
using System.Configuration;
using DevExpress.Web.ASPxUploadControl;
using System.Xml;

namespace Crosland.Automotriz.Web.Repuestos
{

    public partial class SeguimientoImportacionGenerar : System.Web.UI.Page
    {
        private string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        private static DataTable ds = new DataTable();
        private static String RutaExcel = "";

        private clsImportacionesLogic importacionLogic = new clsImportacionesLogic();
        private clsTD_MaterialLogic cls_materialLogic = null;
        private IEnumerable<Object> lista = null;
        //private List<V_PRONOSTICO_IMP_CAB> ListarPronosticoImpCab = null;
        private List<V_PRONOSTICO_IMP_DET> ListarPronosticoImpDet = null;
        private List<IMPORTACION_CAB> ListarImpCab = null;
        private List<TD_ORG_VTA> ListarOrgVta = null;
        private List<IMPORTACION_DET> listaCargaManual = null;
        private List<IMPORTACIONES_DOC_RELACIONADOS> listaCargaDoc = null;
        private List<TD_PROVEEDOR> ListarDatosProveedor = null;
        private List<T_IMP_IMPORTACION_ESTADO> ListarEstadoImp = null;
        private IMPORTACION_DET objCMD;
        private IMPORTACIONES_DOC_RELACIONADOS objIDR;
        private static String strMsg, strTitulo;
        private clsT_Imp_Importaciones_Doc_RelacionadosLogic docLogic = new clsT_Imp_Importaciones_Doc_RelacionadosLogic();
        private static List<TmpRegistrosNoInsertados> tmpArticulosNoInsertados;
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!IsPostBack)
                {
                    Panel img = (Panel)Master.FindControl("asp");
                    img.Visible = false;
                    Panel img2 = (Panel)Master.FindControl("pnlTop");
                    img2.Visible = false;
                    tmpArticulosNoInsertados = new List<TmpRegistrosNoInsertados>();
                }

                validaOperacion();
                listaLogImportacionDet();
                ListaTransporte();
                ListarEstado();
                if (Session["operacon"].ToString() == "0") ListaOficinaVenta();
                if (!IsPostBack)
                {

                    if (Session["intIndex"] != null)
                    {
                        grdDetalle.FocusedRowIndex = Convert.ToInt32(Session["intIndex"]);
                        grdDetalle.ScrollToVisibleIndexOnClient=(Convert.ToInt32(Session["intIndex"]));
                    }
                  
                    cboExtado.Value = "01";
                    if (Session["operacon"].ToString() == "1") MostrarDatosRecuperado();
                    if (Session["obtenerDatos"] != null && Session["obtenerDatos"].ToString() == "1") obtenerDatosCabActualizar(2);
                    if (Session["CMTipo"] != null) PCL1.ActiveTabIndex = 1;

                   
                    if (Session["TIPO_PEDIDO_VALUE"] != null)
                    {
                        cboTipoCarga.Value = Session["TIPO_PEDIDO_VALUE"].ToString();
                    }
                    
                    lblOrganizacionVenta.Text = (Session["DES_ORG_VTA"] != null) ? Session["DES_ORG_VTA"].ToString() : String.Empty;

                    if (Session["listaCargaManual"] != null) CargaManualListado();
                    if (Session["operacon"].ToString() == "1") ListaDocumentoImportaciones();
                    if (Session["listaCargaDoc"] != null) DocumentosRelacionadosListado();
                    lblDROrgVta.Text = (Session["DES_ORG_VTA"] != null) ? Session["DES_ORG_VTA"].ToString() : String.Empty;
                    ListaTipoDocumentoImportaciones();
                    //VerPronosticos();
                }
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL CARGAR LA PAGINA";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }















        private void validaOperacion()
        {
            try
            {
                if (Session["operacon"] == null)
                {
                    Response.Redirect("~/Repuestos/wFrmSeguimientoImportacion.aspx?id=" + idNegocio);
                    return;
                }
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL VALIDAR LA OPERACION";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private void ListaOficinaVenta()
        {
            try
            {
                if (Session["ID_ORG_VTA"] == null)
                {
                    strMsg = "No existe organizacion de venta seleccionada.";
                    MostrarComentario(strMsg);
                    return;
                }

                int intidOrgVta = Convert.ToInt32(Session["ID_ORG_VTA"]);

                lista = new List<Object>();
                lista = new clsTd_Org_Vta_Ofi_Vta_Canal_SectorLogic().listaOficinaVenta(intidOrgVta);

                cboOficinaVenta.DataSource = lista;
                cboOficinaVenta.TextField = "DES_OFI_VTA";
                cboOficinaVenta.ValueField = "ID_OFI_VTA";
                cboOficinaVenta.DataBind();

                //************************
                lblIdCab.Text = string.Empty;
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL LISTAR LAS OFICINAS DE VENTA";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private void ListaTransporte()
        {
            try
            {
                lista = new List<Object>();
                lista = new clsImportacionesLogic().ListaTipoTranspote();

                if (lista == null)
                {
                    strMsg = "No hay datos para los tipos de transporte.";
                    MostrarComentario(strMsg);
                    return;
                }

                cboTipoTransporte.DataSource = lista;
                cboTipoTransporte.TextField = "DES_CORTA";
                cboTipoTransporte.ValueField = "ID_GENERAL_DET";
                cboTipoTransporte.DataBind();
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL LISTAR LOS TRANSPORTES";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private void cargar_Grid2(String filePath, int? tipo)
        {
            try
            {
                String strSQL = "";
                pcImpExcel.ShowOnPageLoad = false;
                pcImpPronostico.ShowOnPageLoad = false;
                ds.Rows.Clear();
                System.Data.OleDb.OleDbConnectionStringBuilder builder = new System.Data.OleDb.OleDbConnectionStringBuilder();
                builder.DataSource = filePath;

                if (Path.GetExtension(filePath).ToUpper() == ".XLS")
                {
                    builder.Provider = "Microsoft.ACE.OLEDB.12.0";
                    builder.Add("Extended Properties", "Excel 8.0;HRD=Yes;IMEX=1");
                }
                else if (Path.GetExtension(filePath).ToUpper() == ".XLSX")
                {
                    builder.Provider = "Microsoft.ACE.OLEDB.12.0";
                    builder.Add("Extended Properties", "Excel 12.0;HRD=Yes;IMEX=1");
                }

                System.Data.OleDb.OleDbConnection oledbConn = new System.Data.OleDb.OleDbConnection(builder.ConnectionString);
                //  String strSQL = "SELECT CODIGO, DESCRIPCION, CANTIDAD, FOB_UNIT, CAJA, TIPO_PRONOSTICO, ID_GENERA_DET FROM [Hoja1$]";// ORDER BY DESCRIPCION";
                strSQL = "SELECT CODIGO, DESCRIPCION, CANTIDAD, FOB_UNIT, CAJA, TIPO_PRONOSTICO, ID_GENERAL_DET FROM [Hoja1$] WHERE CODIGO IS NOT NULL";// ORDER BY DESCRIPCION";
                System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(strSQL, oledbConn);
                System.Data.OleDb.OleDbDataAdapter da = new System.Data.OleDb.OleDbDataAdapter(cmd);
                da.Fill(ds);

                oledbConn.Close();
                RutaExcel = String.Empty;

                int? intNumItemPed = null;
                if (tipo == 1)
                {
                    listaCargaManual = new List<IMPORTACION_DET>();
                    intNumItemPed = 0;
                }
                else if (tipo == 2)
                {
                    listaCargaManual = (Session["listaCargaManual"] != null) ? (List<IMPORTACION_DET>)Session["listaCargaManual"] : new List<IMPORTACION_DET>();
                    intNumItemPed = ObtenerMaxItem();
                }

                foreach (DataRow dr in ds.Rows)
                {
                    if (dr["CODIGO"].ToString() != String.Empty)
                    {
                        objCMD = new IMPORTACION_DET();
                        objCMD.COD_MATERIAL = dr["CODIGO"].ToString();
                        objCMD.DES_MATERIAL = dr["DESCRIPCION"].ToString();
                        objCMD.CANT_IMP = Convert.ToDecimal(dr["CANTIDAD"]);
                        objCMD.FOB_ME = Convert.ToDecimal(dr["FOB_UNIT"]);
                        objCMD.TOTAL_FOB_ME = objCMD.CANT_IMP * objCMD.FOB_ME;
                        objCMD.CAJA = dr["CAJA"].ToString();
                        objCMD.DES_CORTA = dr["TIPO_PRONOSTICO"].ToString();
                        objCMD.COD_TIPO_PEDIDO = dr["ID_GENERAL_DET"].ToString();
                        intNumItemPed++;
                        objCMD.NUM_ITEM_PED = intNumItemPed;
                        listaCargaManual.Add(objCMD);
                    }

                }

                if (listaCargaManual == null || listaCargaManual.Count == 0)
                {
                    ScriptManager.RegisterStartupScript(this, typeof(Page), "carga2", "pcImpExcel.Show()", true);
                    strMsg = "No hay datos en el excel importado";
                    MostrarComentario(strMsg);
                    return;
                }

                Session["strAgregado"] = 1;
                Session["TIPO_PEDIDO_VALUE"] = cboTipoCarga.Value;
                Session["listaCargaManual"] = listaCargaManual;
                CargaManualListado();
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL CARGAR EL EXCEL";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private int? ObtenerMaxItem()
        {
            int? intNumItemPed = 0;
            try
            {
                if (Session["listaCargaManual"] != null) listaCargaManual = (List<IMPORTACION_DET>)Session["listaCargaManual"];

                var q = from t in
                            (from t in listaCargaManual
                             select new
                             {
                                 t.NUM_ITEM_PED,
                                 Dummy = "x"
                             })
                        group t by new { t.Dummy } into g
                        select new
                        {
                            NUM_ITEM_PED = g.Max(p => p.NUM_ITEM_PED) == null ? 0 : g.Max(p => p.NUM_ITEM_PED)
                        };
                if (q.ToList().Count() == 0)
                {
                    intNumItemPed = 0;
                }
                else
                {
                    intNumItemPed = q.ToList()[0].NUM_ITEM_PED;
                }
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL OBTENER EL ULTIMO ITEM";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
                intNumItemPed = 0;
            }
            return intNumItemPed;
        }

        private void listaLogImportacionDet()
        {
            try
            {
                lista = new List<Object>();
                lista = new clsLog_Tipo_PedidoLogic().listar();

                if (lista == null)
                {
                    strMsg = "No hay datos para el tipo de pedido.";
                    MostrarComentario(strMsg);
                    return;
                }

                cboTipoCarga.DataSource = lista;
                cboTipoCarga.ValueField = "TIPO_PEDIDO";
                cboTipoCarga.TextField = "DES_TIPO_PEDIDO";
                cboTipoCarga.DataBind();
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL LISTAR EL DETALLE DE IMPORTACION";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

     

        private void ListarEstado()
        {
            try
            {
                ListarEstadoImp = new List<T_IMP_IMPORTACION_ESTADO>();
                ListarEstadoImp = new clsT_Imp_Importacion_Estadologic().lista();

                if (ListarEstadoImp == null || ListarEstadoImp.Count() == 0)
                {
                    strMsg = "No hay datos para el estado.";
                    MostrarComentario(strMsg);
                    return;
                }

                cboExtado.DataSource = ListarEstadoImp;
                cboExtado.TextField = "DES_IMP_ESTADO";
                cboExtado.ValueField = "COD_IMP_ESTADO";
                cboExtado.DataBind();

            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL CARGAR LOS ESTADOS";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }

        }

        protected void ucCargarExcel_FileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
        {
            try
            {
                if (e.IsValid)
                {
                    String filePath = Server.MapPath("~/Archivos Excel/" + e.UploadedFile.FileName);
                    e.UploadedFile.SaveAs(filePath);
                    RutaExcel = filePath;
                }
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL CARGAR EL ARCHIVO EXCEL";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void cmdGrabar_Click(object sender, EventArgs e)
        {
            if (!GuardarImp()) return;
        }

        private Boolean GuardarImp()
        {
            try
            {
                if (!ValidarCampos()) return false;
                if (Session["operacon"].ToString() == "0") if (VerificarNumeroPedido() != 0) return false;
                //if (Session["operacon"].ToString() == "1" && Session["strAgregado"] != null && Session["strAgregado"].ToString() == "1") if (!VerificarDetalleTipoCarga()) return;
                if (!GrabarImportaciones()) return false;
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL GRABAR LA IMPORTACION";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
                return false;
            }
            return true;
        }

        private Boolean ValidarCampos()
        {
            Boolean boolValidarCampos = true;
            try
            {
                if (cboOficinaVenta.Value == null)
                {
                    strMsg = "Debe seleccionar una oficina";
                    boolValidarCampos = false;
                }
                else if (txtNumPedido.Text.Trim() == String.Empty)
                {
                    strMsg = "Ingrese el número pedido";
                    boolValidarCampos = false;
                }
                else if (txtNumeroOrigen.Text.Trim() == String.Empty)
                {
                    strMsg = "Ingrese el número pedido de origen";
                    boolValidarCampos = false;
                }
                else if (dtpFechaPed.Text.Trim() == String.Empty)
                {
                    strMsg = "Seleccione la fecha de pedido";
                    boolValidarCampos = false;
                }
                else if (dtFecha_Embarque_Est.Text.Trim() == String.Empty)
                {
                    strMsg = "Seleccione la fecha de Embarque Est.";
                    boolValidarCampos = false;
                }
                else if (dtpFechaLlegadaEst.Text.Trim() == String.Empty)
                {
                    strMsg = "Seleccione la fecha de LLegada Est.";
                    boolValidarCampos = false;
                }
                else if (cboTipoTransporte.Value == null)
                {
                    strMsg = "Seleccione un tipo de transporte.";
                    boolValidarCampos = false;
                }
                else if (txtidProv.Text.Trim() == String.Empty || txtcodProv.Text.Trim() == String.Empty)
                {
                    strMsg = "Seleccione el proveedor";
                    boolValidarCampos = false;
                }
                else if (grdDetalle.VisibleRowCount == 0) {

                    strMsg = "Pedido de importación no tiene detalle. Es obligatorio el ingreso de al menos un registro de detalle.";
                    boolValidarCampos = false;
                }
            }
            catch (Exception ex)
            {
                boolValidarCampos = false;
                strMsg = ex.Message;
            }
            if (!boolValidarCampos)
            {
                boolValidarCampos = false;
                strTitulo = "ERROR AL VALIDAR LOS CAMPOS";
                MostrarComentario(strMsg, strTitulo);
            }

            return boolValidarCampos;
        }

        private int VerificarNumeroPedido()
        {
            int intExiste = 0;
            try
            {
                //String strNumPedido = txtNumPedido.Text.Trim();
                int idCab = Convert.ToInt32(Session["ID_IMP_IMPORTACION_CAB"]);
                
                intExiste = new clsImportacionesLogic().listarNumeroPedido(idCab);

                if (intExiste != 0)
                {
                    strMsg = "Ya existe este número de pedido en la base de datos";
                }
            }
            catch (Exception ex)
            {
                intExiste = 1;
                strMsg = ex.Message;
            }

            if (intExiste != 0)
            {
                strTitulo = "ERROR AL VERIFICAR EL NUMERO DE PEDIDO";
                MostrarComentario(strMsg, strTitulo);
            }

            return intExiste;
        }

        private Boolean VerificarDetalleTipoCarga()
        {
            Boolean boolVerificarDetalleTipoCarga = true;
            int intmsg = 0;
            try
            {
                String strNumPedido = Session["NUM_PEDIDO"].ToString();
                int idCab = Convert.ToInt32(Session["ID_IMP_IMPORTACION_CAB"]);
                String strCodTipoPedido = (cboTipoCarga.Value != null) ? cboTipoCarga.Value.ToString() : cboTipoCarga.SelectedItem.Value.ToString();
                boolVerificarDetalleTipoCarga = new clsImportacionesLogic().verificarCodTipoPedido(idCab, strCodTipoPedido);
                if (boolVerificarDetalleTipoCarga == false)
                {
                    PopFiltroDet.ShowOnPageLoad = true;
                    intmsg = 1;
                }
            }
            catch (Exception ex)
            {
                boolVerificarDetalleTipoCarga = false;
                strMsg = ex.Message;
                intmsg = 0;
            }
            if (!boolVerificarDetalleTipoCarga && intmsg == 0)
            {
                strTitulo = "ERROR AL VERIFICAR EL DETALLE POR TIPO DE CARGA";
                MostrarComentario(strMsg, strTitulo);
            }

            return boolVerificarDetalleTipoCarga;
        }




        private struct TmpRegistrosNoInsertados
        {
            public string cod_material { get; set; }
            public string descripcion { get; set; }
            public decimal cantidad { get; set; }
            public decimal fob_unit { get; set; }
            public string caja { get; set; }
            public string tipo_pronostico { get; set; }

        }

        private Boolean GrabarImportaciones()
        {
            tmpArticulosNoInsertados.Clear();
            Boolean boolGrabarImportacion = true;
            int intCab = 0, intDet = 0, intDoc = 0;
            try
            {
                int intIdOrgVta = Convert.ToInt32(Session["ID_ORG_VTA"]);

                int intIdImpCab;

                if (String.IsNullOrEmpty(lblIdCab.Text))
                {
                    intIdImpCab = importacionLogic.UltimoPedidoGenerado() + 1;
                }
                else
                {
                    intIdImpCab = Convert.ToInt32(lblIdCab.Text);
                }
                
                
                if (intIdOrgVta == 0) return false;

                String strNumPedido = txtNumPedido.Text.Trim();
                

                clsImportacionesLogic ImportacionBL = new clsImportacionesLogic();
                T_IMP_IMPORTACION_CAB impcab_ent = new T_IMP_IMPORTACION_CAB();
                List<T_IMP_IMPORTACION_DET> impdet_ent = new List<T_IMP_IMPORTACION_DET>();
                List<T_IMP_IMPORTACIONES_DOC_RELACIONADOS> impdoc_ent = new List<T_IMP_IMPORTACIONES_DOC_RELACIONADOS>();

                Nullable<DateTime> dtpFechaPed_null = null;
                Nullable<DateTime> dtFecha_Embarque_Est_null = null;
                Nullable<DateTime> dtpFechaEmbarque_null = null;
                Nullable<DateTime> dtFec_LLeg_Puerto_null = null;
                //Nullable<DateTime> dtpFechaLlegadaEst_null = null;
                Nullable<DateTime> dtFec_lleg_Almacen_null = null;

                impcab_ent.ID_ORG_VTA = intIdOrgVta;
                impcab_ent.NUM_PEDIDO = strNumPedido;
                impcab_ent.ID_OFI_VTA = cboOficinaVenta.Text == "" ? 0 : Convert.ToInt32(cboOficinaVenta.Value);
                impcab_ent.FEC_PEDIDO = (dtpFechaPed.Text != "") ? dtpFechaPed.Date : dtpFechaPed_null;
                impcab_ent.FEC_EMBARQUE_EST = (dtFecha_Embarque_Est.Text != "") ? dtFecha_Embarque_Est.Date : dtFecha_Embarque_Est_null;
                impcab_ent.FEC_EMBARQUE = (dtpFechaEmbarque.Text != "") ? dtpFechaEmbarque.Date : dtpFechaEmbarque_null;
                impcab_ent.FEC_LLEG_PUERTO = (dtFec_LLeg_Puerto.Text != "") ? dtFec_LLeg_Puerto.Date : dtFec_LLeg_Puerto_null;
                impcab_ent.FEC_LLEG_EST_PUERTO = dtpFechaLlegadaEst.Date;
                impcab_ent.FEC_LLEG_ALMACEN = (dtFec_lleg_Almacen.Text != "") ? dtFec_lleg_Almacen.Date : dtFec_lleg_Almacen_null;
                impcab_ent.COD_IMP_ESTADO = (cboExtado.Value != null) ? cboExtado.Value.ToString() : cboExtado.SelectedIndex.ToString();
                impcab_ent.COD_VIA_TRANSPORTE = "01";
                impcab_ent.OBSERVACION = txtObservaciones.Text;
                impcab_ent.ID_PROVEEDOR = txtidProv.Text == "" ? 0 : Convert.ToInt32(txtidProv.Text);
                impcab_ent.FACTOR_IMP = (decimal)0.0;
                impcab_ent.NRO_POLIZA = "";
                impcab_ent.NRO_TITULO = "";
                impcab_ent.FEC_TITULO = DateTime.Now;
                impcab_ent.FEC_POLIZA = DateTime.Now;
                impcab_ent.IND_SKD = 2;
                impcab_ent.ID_TIPO_TRANSPORTE = cboTipoTransporte.Text == "" ? 0 : Convert.ToInt32(cboTipoTransporte.SelectedItem.Value);
                impcab_ent.NUM_PEDIDO_ORIG = txtNumeroOrigen.Text;
                impcab_ent.CANT_CONTENEDOR_20_PIES = txtCantidadContenedor20PIES.Text == "" ? 0 : Convert.ToInt32(txtCantidadContenedor20PIES.Text);
                impcab_ent.CANT_CONTENEDOR_40_PIES = txtCantidadContenedor40PIES.Text == "" ? 0 : Convert.ToInt32(txtCantidadContenedor40PIES.Text);
                impcab_ent.ID_IMP_IMPORTACION_CAB = intIdImpCab;
                impcab_ent.NRO_PRONOSTICO = Convert.ToInt32(Session["intNroPronostico"]);

                if (impcab_ent != null) intCab = 1;

                int intItemPedido = 0, intIdMaterial = 0, intItemDoc = 0;
                String strCodMaterial, strDesMaterial;
                listaCargaManual = (Session["listaCargaManual"] != null) ? (List<IMPORTACION_DET>)Session["listaCargaManual"] : new List<IMPORTACION_DET>();
                int totalArticulosNoRegistrados = 0;
                if (listaCargaManual != null)
                {

                    if (listaCargaManual.Count() > 0 && (cboTipoCarga.Value == null || cboTipoCarga.SelectedItem.Value == null || cboTipoCarga.Text == String.Empty))
                    {
                        strMsg = "Seleccione el tipo de carga, para guardar el detalle.";
                        boolGrabarImportacion = false;
                    }
                    if (boolGrabarImportacion && Session["strAgregado"] != null && Session["strAgregado"].ToString() == "1")
                    {
                        String strTipoCarga = (cboTipoCarga.Value != null) ? cboTipoCarga.Value.ToString() : cboTipoCarga.SelectedItem.Value.ToString();
                        clsImportacionesLogic impLog = new clsImportacionesLogic();
                        Boolean boolEliminarDetalle = impLog.EliminarDetalle(intIdImpCab, strTipoCarga);
                        if (boolEliminarDetalle)
                        {
                            


                            while (intItemPedido <= (listaCargaManual.Count() - 1))
                            {
                                int? intIdColor;
                                try
                                {
                                    T_IMP_IMPORTACION_DET objImpDet = new T_IMP_IMPORTACION_DET();
                                    cls_materialLogic = new clsTD_MaterialLogic();

                                    strCodMaterial = listaCargaManual[intItemPedido].COD_MATERIAL;
                                    intIdMaterial = cls_materialLogic.RetorIDMaterial(strCodMaterial);
                                    strDesMaterial = listaCargaManual[intItemPedido].DES_MATERIAL;

                                    if (intIdMaterial == 0)
                                    {

                                        cls_materialLogic.Insert_T_MATERIAL_POR_ASIGNAR(strCodMaterial, strDesMaterial);
                                        
                                        TmpRegistrosNoInsertados registro = new TmpRegistrosNoInsertados() { cod_material = strCodMaterial, descripcion = strDesMaterial, cantidad = Convert.ToDecimal(listaCargaManual[intItemPedido].CANT_IMP), fob_unit = Convert.ToDecimal(listaCargaManual[intItemPedido].FOB_ME), caja = listaCargaManual[intItemPedido].CAJA, tipo_pronostico ="" };
                                        tmpArticulosNoInsertados.Add(registro);
                                        totalArticulosNoRegistrados = totalArticulosNoRegistrados + 1;

                                    }
                                    else
                                    {
                                        intIdMaterial = cls_materialLogic.RetorIDMaterial(strCodMaterial);
                                        intIdColor = (intIdOrgVta == 2) ? 1 : listaCargaManual[intItemPedido].ID_COLOR;
                                        objImpDet.ID_ORG_VTA = intIdOrgVta;
                                        objImpDet.NUM_PEDIDO = strNumPedido;
                                        objImpDet.ID_IMP_IMPORTACION_CAB = intIdImpCab;
                                        objImpDet.COD_TIPO_PEDIDO = cboTipoCarga.SelectedItem.Value.ToString(); //cboTipoCarga.SelectedItem.Value.ToString();
                                        objImpDet.NUM_ITEM_PED = Convert.ToInt32(listaCargaManual[intItemPedido].NUM_ITEM_PED);
                                        objImpDet.ID_MATERIAL = intIdMaterial;
                                        objImpDet.COD_MATERIAL = strCodMaterial;
                                        objImpDet.DES_MATERIAL_IMP = strDesMaterial;
                                        objImpDet.CAJA = listaCargaManual[intItemPedido].CAJA;
                                        objImpDet.CANT_IMP = Convert.ToDecimal(listaCargaManual[intItemPedido].CANT_IMP);
                                        objImpDet.FOB_ME = Convert.ToDecimal(listaCargaManual[intItemPedido].FOB_ME);
                                        objImpDet.ID_PRONOSTICO_TIPO = listaCargaManual[intItemPedido].ID_PRONOSTICO_TIPO ?? 58;
                                        objImpDet.TOTAL_FOB_ME = Convert.ToDecimal(listaCargaManual[intItemPedido].TOTAL_FOB_ME);
                                        objImpDet.ID_COLOR = intIdColor;
                                        impdet_ent.Add(objImpDet);
                                    }

                                    intItemPedido++;
                                }
                                catch (Exception)
                                {
                                    continue;
                                }
                            }
                        }
                    }
                }


                if (impdet_ent != null || impdet_ent.Count() > 0) intDet = 1;

                listaCargaDoc = (Session["listaCargaDoc"] != null) ? (List<IMPORTACIONES_DOC_RELACIONADOS>)Session["listaCargaDoc"] : new List<IMPORTACIONES_DOC_RELACIONADOS>();
                if (listaCargaDoc != null)
                {
                    if (Session["strAgregarDoc"] != null && Session["strAgregarDoc"].ToString() == "1")
                    {
                        while (intItemDoc <= (listaCargaDoc.Count() - 1))
                        {
                            try
                            {
                                T_IMP_IMPORTACIONES_DOC_RELACIONADOS objImpDoc = new T_IMP_IMPORTACIONES_DOC_RELACIONADOS();
                                objImpDoc.ID_T_IMPORTACIONES_RELACION = Convert.ToInt32(listaCargaDoc[intItemDoc].ID_T_IMPORTACIONES_RELACION);
                                //objImpDoc.ID_ORG_VTA = intIdOrgVta;
                                //objImpDoc.NUM_PEDIDO = strNumPedido;
                                //*******************************
                                objImpDoc.ID_IMP_IMPORTACION_CAB = intIdImpCab;
                                //*******************************
                                objImpDoc.ID_TIPO_DOC_SEG = Convert.ToInt32(listaCargaDoc[intItemDoc].ID_TIPO_DOC_SEG);
                                objImpDoc.COD_NRO_DOCUMENTO = listaCargaDoc[intItemDoc].COD_NRO_DOCUMENTO;
                                impdoc_ent.Add(objImpDoc);
                                intItemDoc++;
                            }
                            catch (Exception)
                            {
                                continue;
                            }

                        }
                    }
                }

                if (impdoc_ent != null || impdoc_ent.Count() > 0) intDoc = 1;

                String strOperacion = Session["operacon"].ToString();

                if (boolGrabarImportacion)
                {
                    bool DocImp = docLogic.EliminarDocumentos2(intIdOrgVta,Session["ID_IMP_IMPORTACION_CAB"]==null?0: Convert.ToInt32(Session["ID_IMP_IMPORTACION_CAB"]));
                    
                 

                    if (Session["strAgregarDoc"].ToString() == "1" && DocImp==false)
                    {
                        boolGrabarImportacion = false;
                        strMsg = "Error al actualizar los documentos.";
                    }
                    if (boolGrabarImportacion)
                    {
                        if (strOperacion == "0")
                        {
                            if (ImportacionBL.VerificarNumeroPedido(txtNumPedido.Text))
                            {
                                strMsg = "El numero de pedido ya existe.";
                                boolGrabarImportacion = false;
                            }
                            else
                            {
                                boolGrabarImportacion=ImportacionBL.Insertar(impcab_ent, impdet_ent, impdoc_ent);
                            }
                            

                        }
                        else if (strOperacion == "1")
                        {
                            boolGrabarImportacion=ImportacionBL.Modificar(impcab_ent, impdet_ent, impdoc_ent);
                        }
                        else
                        {
                            return false;
                        }

                        //boolGrabarImportacion = (strOperacion == "0") ? ImportacionBL.Insertar(impcab_ent, impdet_ent, impdoc_ent) : ((strOperacion == "1") ? ImportacionBL.Modificar(impcab_ent, impdet_ent, impdoc_ent) : false);

                        if (boolGrabarImportacion)
                        {
                            if (strOperacion == "0")
                            {
                                if (tmpArticulosNoInsertados.Count > 0)
                                {
                                    lblMsjDetalleRegistro.ClientVisible = true;
                                    if (totalArticulosNoRegistrados != 0)
                                    {
                                        hplArticulosNoRegistrado.ClientVisible = true;
                                    }
                                    lblMsjDetalleRegistro.Text = "Artículos no registrados : " + totalArticulosNoRegistrados;
                                    strMsg = "Se Grabo parcialmente";
                                }
                                else { 
                                    strMsg = "Se Grabo correctamente";
                                }


                      


                            }else if(strOperacion == "1"){


                                if (tmpArticulosNoInsertados.Count > 0)
                                {
                                    lblMsjDetalleRegistro.ClientVisible = true;
                                    if (totalArticulosNoRegistrados != 0)
                                    {
                                        hplArticulosNoRegistrado.ClientVisible = true;
                                    }
                                    lblMsjDetalleRegistro.Text = "Artículos no registrados : " + totalArticulosNoRegistrados;
                                    strMsg = "Se Actualizó parcialmente";
                                }else{
                                  strMsg = "Se Actualizó Correctamente.";
                                   }
                            }




                            /*Actualiza td_fob y Actualiza t_imp_importacion_det_fob*/


                            clsImportacionesLogic imp = new clsImportacionesLogic();

                            if (cboTipoCarga.Value.ToString().ToUpper() == "PAC") {
                                imp.USP_TD_FOB_ACTUALIZA_PRECIO_FOB();
                                imp.USP_T_IMP_IMPORTACION_DET_ACTUALIZA_FOB(intIdImpCab);                            
                            }


                        }
                        else if (!boolGrabarImportacion)
                        {
                            if (strOperacion == "0")
                            {
                                if (ImportacionBL.VerificarNumeroPedido(txtNumPedido.Text))
                                {
                                    strMsg = "El numero de pedido ya existe.";
                                }
                                else
                                {
                                    strMsg = "Error Al Guardar. Por Favor Verificar.";
                                }
                            }
                            else if (strOperacion == "1")
                            {
                                strMsg = "Error Al Actualizar. Por Favor Verificar.";
                            }
                            else
                            {
                                strMsg = String.Empty;
                            }
                            
                            //strMsg = (strOperacion == "0") ? "Error Al Guardar. Por Favor Verificar." : ((strOperacion == "1") ? "Error Al Actualizar. Por Favor Verificar." : String.Empty);
                        }
                    }

                 
                }

                Session["ID_IMP_IMPORTACION_CAB"] =intIdImpCab;
                lblIdCab.Text = Session["ID_IMP_IMPORTACION_CAB"].ToString();
            }
            catch (Exception ex)
            {
                boolGrabarImportacion = false;
                strMsg = ex.Message;
            }

            if (!boolGrabarImportacion)
            {
                boolGrabarImportacion = false;
                strTitulo = "ERROR AL GRABAR LA IMPORTACION";
                MostrarComentario(strMsg, strTitulo);
            }
            else
            {
                Session["strAgregado"] = "0";
                Session["strAgregarDoc"] = "0";
                Session["strGrabDoc"] = "0";
                Session["CMTipo"] = null;
                //if (Session["operacon"].ToString() == "0")
                
                PasarAModificar();
                MostrarComentario(strMsg);
            }

            return boolGrabarImportacion;
        }

        private void MostrarDatosReporte()
        {

            try
            {
                int idCab = Convert.ToInt32(Session["ID_IMP_IMPORTACION_CAB"]);
                ClsLogImportacionNoGrabadosLogic.list = importacionLogic.BusquedaImportacionDet(idCab);
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL MOSTRAR LOS DATOS DEL REPORTE";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }


        private void MostrarDatosRecuperado()
        {
            try
            {
                String strNumPedido, strvacio = String.Empty;

                strNumPedido = (Session["NUM_PEDIDO"] != null) ? Session["NUM_PEDIDO"].ToString() : strvacio;
                int idCab = Convert.ToInt32(Session["ID_IMP_IMPORTACION_CAB"]);
                
                if (!obtenerDatosCab(idCab,strNumPedido)) return;
                lblIdCab.Text = idCab.ToString();
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL RECUPERAR LOS DATOS DE LA SESION";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }

        }

        private Boolean obtenerDatosCab(int idCab, String strNumPedido)
        {
            Boolean boolObtenerDatosCab = true;
            try
            {
                ListarImpCab = new List<IMPORTACION_CAB>();// List<T_IMP_IMPORTACION_CAB>();
                //ListarImpCab = new clsImportacionesLogic().listarCab(strNumPedido);
                ListarImpCab = new clsImportacionesLogic().listarCab(idCab);

                if (ListarImpCab == null)
                {
                    boolObtenerDatosCab = false;
                    strMsg = "No hay datos para el pedido de importacion seleccionado.";
                }

                if (boolObtenerDatosCab)
                {

                    int? intIdOrgVenta = null, intIdOficinaVenta = null, intIdTipoTransporte = null, intIdProveedor = null;
                    String strNroPedidoOrigen = String.Empty, strObservaciones = String.Empty, strOrgVta = String.Empty, strIdEstado = String.Empty;
                    DateTime? dtmFechaPedido = null, dtmFechaEmbarqueEst = null, dtmFechaEmbarque = null, dtmFechaLLegPuertoEst = null, dtmFechaLlegPuerto = null, dtmFechaLlegAlmacen = null;

                    intIdOrgVenta = ListarImpCab[0].ID_ORG_VTA;
                    intIdOficinaVenta = ListarImpCab[0].ID_OFI_VTA;
                    intIdTipoTransporte = ListarImpCab[0].ID_TIPO_TRANSPORTE;
                    intIdProveedor = ListarImpCab[0].ID_PROVEEDOR;

                    strNroPedidoOrigen = ListarImpCab[0].NUM_PEDIDO_ORIG;
                    strObservaciones = ListarImpCab[0].OBSERVACION;
                    strIdEstado = ListarImpCab[0].COD_IMP_ESTADO;

                    dtmFechaPedido = ListarImpCab[0].FEC_PEDIDO;
                    dtmFechaEmbarqueEst = ListarImpCab[0].FEC_EMBARQUE_EST;
                    dtmFechaEmbarque = ListarImpCab[0].FEC_EMBARQUE;
                    dtmFechaLLegPuertoEst = ListarImpCab[0].FEC_LLEG_EST_PUERTO;
                    dtmFechaLlegPuerto = ListarImpCab[0].FEC_LLEG_PUERTO;
                    dtmFechaLlegAlmacen = ListarImpCab[0].FEC_LLEG_ALMACEN;
                    txtCantidadContenedor20PIES.Text =ListarImpCab[0].CANT_CONTENEDOR_20_PIES.ToString();
                    txtCantidadContenedor40PIES.Text = ListarImpCab[0].CANT_CONTENEDOR_40_PIES.ToString();
                    txtNumeroOrigen.Text = strNroPedidoOrigen;
                    txtNumPedido.Text = ListarImpCab[0].NUM_PEDIDO.ToString();//strNumPedido;
                    //txtNumPedido.Enabled = false;
                    lblIdCab.Text = ListarImpCab[0].ID_IMP_IMPORTACION_CAB.ToString();
                    txtObservaciones.Text = strObservaciones;

                    dtpFechaPed.Value = dtmFechaPedido;

                    cboTipoTransporte.Value = intIdTipoTransporte.ToString();
                    cboExtado.Value = strIdEstado;

                    dtFecha_Embarque_Est.Value = dtmFechaEmbarqueEst;
                    dtpFechaEmbarque.Value = dtmFechaEmbarque;
                    dtpFechaLlegadaEst.Value = dtmFechaLLegPuertoEst;
                    dtFec_LLeg_Puerto.Value = dtmFechaLlegPuerto;
                    dtFec_lleg_Almacen.Value = dtmFechaLlegAlmacen;

                    Session["ID_ORG_VTA"] = intIdOrgVenta;

                    if (intIdOrgVenta != null) BuscarOrgVta(intIdOrgVenta);
                    if (intIdOrgVenta != null) ListaOficinaVenta();
                    if (intIdProveedor != null) BuscarProveedor(intIdProveedor);

                    Session["ListarImpCab"] = ListarImpCab;
                    cboOficinaVenta.Value = intIdOficinaVenta.ToString();
                    if (Session["CMTipo"] == null)
                    {
                        cboTipoCarga.Value = (Session["TIPO_PEDIDO_VALUE"] != null) ? Session["TIPO_PEDIDO_VALUE"].ToString() : "PAC";
                        MostrarDetalleImp();
                    }
                }
            }
            catch (Exception ex)
            {
                boolObtenerDatosCab = false;
                strMsg = ex.Message;
            }

            if (!boolObtenerDatosCab)
            {
                strTitulo = "ERROR AL OBTENER LOS DATOS DE LA CABECERA";
                MostrarComentario(strMsg, strTitulo);
            }
            return boolObtenerDatosCab;
        }

        private Boolean obtenerDatosDet(int idCab, String strCodTipoPedido)
        {
            Boolean boolObtenerDatosDet = true;

            try
            {
                listaCargaManual = new List<IMPORTACION_DET>();
                listaCargaManual = new clsImportacionesLogic().listarDet(idCab, strCodTipoPedido);
                Session["listaCargaManual"] = listaCargaManual;
                CargaManualListado();
            }
            catch (Exception ex)
            {
                boolObtenerDatosDet = false;
                strMsg = ex.Message;
            }
            if (!boolObtenerDatosDet)
            {
                strTitulo = "ERROR AL OBTENER LOS DATOS DEL DETALLE";
                MostrarComentario(strMsg, strTitulo);
            }

            return boolObtenerDatosDet;
        }

        private void BuscarOrgVta(int? intIdOrgVta)
        {
            try
            {
                ListarOrgVta = new List<TD_ORG_VTA>();
                ListarOrgVta = new clsTd_Org_VtaLogic().lista(intIdOrgVta);

                if (ListarOrgVta == null || ListarOrgVta.Count() == 0)
                {
                    strMsg = "No hay datos para la organizacion seleccionada.";
                    MostrarComentario(strMsg);
                    return;
                }

                String strDesOrg = ListarOrgVta[0].DES_ORG_VTA.Trim();
                Session["DES_ORG_VTA"] = strDesOrg;
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL BUSCAR LA ORGANIZACION DE VENTA";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private void BuscarProveedor(int? intidProv)
        {
            try
            {
                ListarDatosProveedor = new List<TD_PROVEEDOR>();
                clsTd_ProveedorLogic provLogic = new clsTd_ProveedorLogic();
                ListarDatosProveedor = provLogic.listar(intidProv);

                if (ListarDatosProveedor == null || ListarDatosProveedor.Count() == 0)
                {
                    //strMsg = "No Hay Datos Para el Proveedor";
                    //MostrarComentario(strMsg);
                    return;
                }

                String strcodProv = String.Empty, strnomProv = String.Empty;
                strcodProv = ListarDatosProveedor[0].COD_PROVEEDOR.ToString();
                strnomProv = ListarDatosProveedor[0].NOM_PROVEEDOR;

                txtidProv.Text = intidProv.ToString();
                txtcodProv.Text = strcodProv;
                txtnomProv.Text = strnomProv;
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL BUSCAR AL PROVEEDOR";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void btnAceptar_Click(object sender, EventArgs e)
        {
            try
            {
                pcImpPronostico.ShowOnPageLoad = false;
                listaCargaManual = (Session["listaCargaManual"] != null) ? (List<IMPORTACION_DET>)Session["listaCargaManual"] : new List<IMPORTACION_DET>();
                if (listaCargaManual != null && listaCargaManual.Count() > 0)
                {
                    //pcImpPronostico.ShowOnPageLoad = true;
                    pcPronosticos.ShowOnPageLoad = true;
                    return;
                }
                Session["listaCargaManual"] = listaCargaManual;
                Cargar_Externo(2);
            }
            catch (Exception ex)
            {
                pcImpPronostico.ShowOnPageLoad = true;
                strTitulo = "ERROR AL VALIDAR EL PRONOSTICO.";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private void Cargar_Externo(int? intTipo)
        {
            try
            {
                pcPronosticos.ShowOnPageLoad = false;
                pcImpPronostico.ShowOnPageLoad = false;
                int intIndex = grdPronostico.FocusedRowIndex;
                if (intIndex == -1)
                {
                    //pcImpPronostico.ShowOnPageLoad = true;
                    strMsg = "Debe seleccionar un pronostico.";
                    MostrarComentario(strMsg);
                    return;
                }

                int intNroPronostico = Convert.ToInt32(grdPronostico.GetRowValues(intIndex, "Nro_Pronostico"));
                Session["intNroPronostico"] = intNroPronostico;
                //int intIdOrgVta = Convert.ToInt32(Session["ID_ORG_VTA"]);
                ListarPronosticoImpDet = new List<V_PRONOSTICO_IMP_DET>();
                ActualizarPedidoLogic actualizapedido = new ActualizarPedidoLogic();

                ListarPronosticoImpDet = actualizapedido.ListaCargaExterno(intNroPronostico);
                //ListarPronosticoImpDet = actualizapedido.ListaCargaExterno(intNroPronostico, intIdOrgVta);

                if (ListarPronosticoImpDet == null || ListarPronosticoImpDet.Count() == 0)
                {
                    // pcImpPronostico.ShowOnPageLoad = true;
                    strMsg = "No Hay Detalle Para El Pronostico Seleccionado.";
                    MostrarComentario(strMsg);
                    return;
                }
                int? intNumItemPed = null;

                if (intTipo == 1)
                {
                    listaCargaManual = new List<IMPORTACION_DET>();
                    intNumItemPed = 0;
                }
                else if (intTipo == 2)
                {
                    listaCargaManual = (List<IMPORTACION_DET>)Session["listaCargaManual"];
                    intNumItemPed = ObtenerMaxItem();
                }

                foreach (var item in ListarPronosticoImpDet)
                {
                    objCMD = new IMPORTACION_DET();
                    objCMD.COD_MATERIAL = item.COD_MATERIAL;
                    objCMD.DES_MATERIAL = item.DES_MATERIAL;
                    objCMD.FOB_ME = item.fob_me;
                    objCMD.CANT_IMP = item.cant_sug_real;
                    objCMD.TOTAL_FOB_ME = item.cant_sug_real * item.fob_me;
                    objCMD.DES_CORTA = item.DES_CORTA;
                    intNumItemPed++;
                    objCMD.NUM_ITEM_PED = intNumItemPed;
                    listaCargaManual.Add(objCMD);
                }

                Session["strAgregado"] = 1;
                Session["TIPO_PEDIDO_VALUE"] = cboTipoCarga.Value;
                Session["listaCargaManual"] = listaCargaManual;
                CargaManualListado();
            }
            catch (Exception ex)
            {
                pcImpPronostico.ShowOnPageLoad = true;
                strTitulo = "ERROR AL CARGAR EL PRONOSTICO.";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void btnFormatoExcel_Click(object sender, EventArgs e)
        {
            try
            {
                string filepath = Server.MapPath("\\Archivos Excel\\Formato\\Modelo_carga.xlsx");
                string filename = "Modelo_carga.xlsx";
                Response.Clear();
                Response.ContentType = "application/vnd.ms-excel";
                Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
                Response.Flush();
                Response.WriteFile(filepath);
                Response.End();
            }
            catch
            {

            }


        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            //txtnumeroPronostico.Text = "";
        }

        protected void btnPdfExport_Click(object sender, EventArgs e)
        {
            MostrarDatosReporte();
        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            if (
                !VerificarCamposSalir() ||
                (Session["strAgregado"] != null && Session["strAgregado"].ToString() == "1") ||
                (Session["strAgregarDoc"] != null && Session["strAgregarDoc"].ToString() == "1")
                )
            {
                pcValSalir.ShowOnPageLoad = true;
                return;
            }

            Salir();
        }

        private void Salir()
        {
            Session["operacion"] = null;
            Session["NUM_PEDIDO"] = null;
            Session["ID_IMP_IMPORTACION_CAB"] = null;
            Session["ID_ORG_VTA"] = null;
            Session["obtenerDatos"] = null;
            Session["listaCargaManual"] = null;
            Session["ListarImpCab"] = null;
            Session["CMTipo"] = null;
            Response.Redirect("~/Repuestos/wFrmSeguimientoImportacion.aspx?id=" + idNegocio);
            return;
        }

        protected void btnValSalirAceptar_Click(object sender, EventArgs e)
        {
            if (!GuardarImp()) return;
            Salir();
        }

        protected void btnValSalirSalir_Click(object sender, EventArgs e)
        {
            Salir();
        }

        private Boolean VerificarCamposSalir()
        {
            Boolean boolVerificarCamposSalir = true;
            try
            {
                if (Session["operacon"].ToString() == "0")
                {
                    if (cboOficinaVenta.Value != null)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (txtNumPedido.Text.Trim() != String.Empty)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (txtNumeroOrigen.Text.Trim() != String.Empty)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (dtpFechaPed.Text.Trim() != String.Empty)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (dtFecha_Embarque_Est.Text.Trim() != String.Empty)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (dtpFechaLlegadaEst.Text.Trim() != String.Empty)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (dtpFechaEmbarque.Value != null)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (dtFec_LLeg_Puerto.Value != null)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (dtFec_lleg_Almacen.Value != null)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (cboTipoTransporte.Value != null)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (txtidProv.Text.Trim() != String.Empty || txtcodProv.Text.Trim() != String.Empty)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (cboExtado.Value.ToString() != "01")
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (txtObservaciones.Text.Trim() != String.Empty)
                    {
                        boolVerificarCamposSalir = false;
                    }
                }
                else if (Session["operacon"].ToString() == "1")
                {
                    if (Session["ListarImpCab"] != null) ListarImpCab = (List<IMPORTACION_CAB>)Session["ListarImpCab"];

                    if (ListarImpCab == null)
                    {
                        return false;
                    }

                    if (cboOficinaVenta.Value.ToString() != ListarImpCab[0].ID_OFI_VTA.ToString())
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (txtNumPedido.Text.Trim() != ListarImpCab[0].NUM_PEDIDO)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (txtNumeroOrigen.Text.Trim() != ListarImpCab[0].NUM_PEDIDO_ORIG)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if ((DateTime?)dtpFechaPed.Value != ListarImpCab[0].FEC_PEDIDO)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if ((DateTime?)dtFecha_Embarque_Est.Value != ListarImpCab[0].FEC_EMBARQUE_EST)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if ((DateTime?)dtpFechaLlegadaEst.Value != ListarImpCab[0].FEC_LLEG_EST_PUERTO)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if ((DateTime?)dtpFechaEmbarque.Value != ListarImpCab[0].FEC_EMBARQUE)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if ((DateTime?)dtFec_LLeg_Puerto.Value != ListarImpCab[0].FEC_LLEG_PUERTO)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if ((DateTime?)dtFec_lleg_Almacen.Value != ListarImpCab[0].FEC_LLEG_ALMACEN)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (cboTipoTransporte.Value.ToString() != ListarImpCab[0].ID_TIPO_TRANSPORTE.ToString())
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (txtidProv.Text.Trim() != ListarImpCab[0].ID_PROVEEDOR.ToString())
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (cboExtado.Value.ToString() != ListarImpCab[0].COD_IMP_ESTADO)
                    {
                        boolVerificarCamposSalir = false;
                    }
                    else if (txtObservaciones.Text.Trim() != ListarImpCab[0].OBSERVACION)
                    {
                        boolVerificarCamposSalir = false;
                    }
                }
            }
            catch (Exception)
            {
                boolVerificarCamposSalir = false;
            }

            return boolVerificarCamposSalir;
        }

        protected void PopAceptarFiltro_Click(object sender, EventArgs e)
        {
            try
            {

                clsImportacionesLogic impLog = new clsImportacionesLogic();
                impLog.EliminarDetalle(Convert.ToInt32(lblIdCab.Text), cboTipoCarga.SelectedItem.Value.ToString());
                if (!GrabarImportaciones()) return;
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL ELIMINAR EL DETALLE.";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void AgregarProveedor(object sender, EventArgs e)
        {
            try
            {
                int intindex = grdProveedorImp.FocusedRowIndex;
                if (intindex == -1)
                {
                    strMsg = "Debe seleccionar un proveedor";
                    MostrarComentario(strMsg);
                    return;
                }

                int intidProv = Convert.ToInt32(grdProveedorImp.GetRowValues(intindex, "ID_PROVEEDOR").ToString());
                String strcodProv = grdProveedorImp.GetRowValues(intindex, "COD_PROVEEDOR").ToString();
                String strnomProv = grdProveedorImp.GetRowValues(intindex, "NOM_PROVEEDOR").ToString();

                txtidProv.Text = intidProv.ToString();
                txtcodProv.Text = strcodProv;
                txtnomProv.Text = strnomProv;
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL AGREGAR EL PROVEEDOR";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private void CargaManualListado()
        {
            try
            {
                if (Session["listaCargaManual"] != null) listaCargaManual = (List<IMPORTACION_DET>)Session["listaCargaManual"];
                if (listaCargaManual == null) return;
                if (listaCargaManual.Count() == 0) cboTipoCarga.Enabled = true;

                grdDetalle.DataSource = listaCargaManual;
                grdDetalle.DataBind();
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL MOSTRAR LOS DATOS A LA GRILLA.";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void cmdImportar_Click(object sender, EventArgs e)
        {
            try
            {
                pcImpExcel.ShowOnPageLoad = false;
                listaCargaManual = (Session["listaCargaManual"] != null) ? (List<IMPORTACION_DET>)Session["listaCargaManual"] : new List<IMPORTACION_DET>();
                if (listaCargaManual != null && listaCargaManual.Count() > 0)
                {
                    // pcImpExcel.ShowOnPageLoad = true;
                    pcCarga.ShowOnPageLoad = true;
                    return;
                }
                TipoCarga(2);
            }
            catch (Exception ex)
            {
                pcImpExcel.ShowOnPageLoad = true;
                strTitulo = "ERROR AL IMPORTAR";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void grdProveedorImp_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            ProveedorBuscar();
        }

        protected void grdProveedorImp_PageIndexChanged(object sender, EventArgs e)
        {
            ProveedorBuscar();
        }

        protected void grdDetalle_PageIndexChanged(object sender, EventArgs e)
        {
            CargaManualListado();
        }

        protected void grdDetalle_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            CargaManualListado();
        }

        //protected void grdPronostico_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        //{
        //    //ListarPronosticos();
        //}

        //protected void grdPronostico_PageIndexChanged(object sender, EventArgs e)
        //{
        //    //ListarPronosticos();
        //}

        protected void NuevoCM(object sender, EventArgs e)
        {
            NuevoCM("1");
        }

        protected void ModificarCM(object sender, EventArgs e)
        {
            try
            {
                int intIndex = grdDetalle.FocusedRowIndex;
                if (intIndex == -1)
                {
                    strMsg = "Debe seleccionar un detalle a modificar.";
                    MostrarComentario(strMsg);
                    return;
                }

                int? intNumItemPed = Convert.ToInt32(grdDetalle.GetRowValues(intIndex, "NUM_ITEM_PED"));
                Session["intNumItemPed"] = intNumItemPed;
                Session["intIndex"] = intIndex;
                NuevoCM("2");
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL MODIFICAR EL DETALLE SELECCIONADO";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void EliminarCM(object sender, EventArgs e)
        {
            try
            {
                int intIndex = grdDetalle.FocusedRowIndex;
                if (intIndex == -1)
                {
                    strMsg = "Debe seleccionar un detalle a eliminar.";
                    MostrarComentario(strMsg);
                    return;
                }
                listaCargaManual = (Session["listaCargaManual"] != null) ? (List<IMPORTACION_DET>)Session["listaCargaManual"] : new List<IMPORTACION_DET>();
                listaCargaManual.RemoveAt(intIndex);
                Session["listaCargaManual"] = listaCargaManual;
                Session["strAgregado"] = (listaCargaManual.Count() == 0) ? "0" : "1";
                CargaManualListado();
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL ELIMINAR EL DETALLE SELECCIONADO";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private void NuevoCM(String tipo)
        {
            try
            {
                if (cboTipoCarga.Value == null)
                {
                    strMsg = "Debe seleccionar un tipo de carga.";
                    MostrarComentario(strMsg);
                    return;
                }

                //Session["strAgregado"] = "0";
                Session["CMTipo"] = tipo;
                Session["NUM_PEDIDO"] = txtNumPedido.Text;
                Session["TIPO_PEDIDO_VALUE"] = cboTipoCarga.SelectedItem.Value ?? cboTipoCarga.Value;
                Session["TIPO_PEDIDO_TEXT"] = cboTipoCarga.SelectedItem.Text ?? cboTipoCarga.Text;
                obtenerDatosCabActualizar(1);
                Response.Redirect("~/Repuestos/wFrmSeguimientoImportacionDetalleActualizar.aspx?id=" + idNegocio);
                return;
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL REDIRECCIONAR";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private void obtenerDatosCabActualizar(int? intTipo)
        {
            try
            {
                int? intIdOficinaVenta = null, intIdTipoTransporte = null, intIdProveedor = null;
                String strNroPedidoOrigen, strObservaciones, strNumPedido, strCodProveedor, strNomProveedor;
                DateTime? dtmFechaPedido = null, dtmFechaEmbarqueEst = null, dtmFechaEmbarque = null, dtmFechaLLegPuertoEst = null, dtmFechaLlegPuerto = null, dtmFechaLlegAlmacen = null;

                if (intTipo == 1)
                {
                    intIdOficinaVenta = (cboOficinaVenta.SelectedItem.Value != null) ? Convert.ToInt32(cboOficinaVenta.SelectedItem.Value) : Convert.ToInt32(cboOficinaVenta.Value);
                    intIdTipoTransporte = (cboTipoTransporte.SelectedItem.Value != null) ? Convert.ToInt32(cboTipoTransporte.SelectedItem.Value) : Convert.ToInt32(cboTipoTransporte.Value);
                    intIdProveedor = (txtidProv.Text.Trim() != String.Empty) ? Convert.ToInt32(txtidProv.Text.Trim()) : intIdProveedor;

                    strNroPedidoOrigen = txtNumeroOrigen.Text.Trim();
                    strNumPedido = txtNumPedido.Text.Trim();
                    strCodProveedor = txtcodProv.Text.Trim();
                    strNomProveedor = txtnomProv.Text.Trim();
                    strObservaciones = txtObservaciones.Text.Trim();

                    dtmFechaPedido = dtpFechaPed.Date;
                    dtmFechaEmbarqueEst = dtFecha_Embarque_Est.Date;
                    dtmFechaEmbarque = dtpFechaEmbarque.Date;
                    dtmFechaLLegPuertoEst = dtpFechaLlegadaEst.Date;
                    dtmFechaLlegPuerto = dtFec_LLeg_Puerto.Date;
                    dtmFechaLlegAlmacen = dtFec_lleg_Almacen.Date;

                    Session["intIdOficinaVenta"] = intIdOficinaVenta;
                    Session["intIdTipoTransporte"] = intIdTipoTransporte;
                    Session["intIdProveedor"] = intIdProveedor;
                    Session["strCodProveedor"] = strCodProveedor;
                    Session["strNomProveedor"] = strNomProveedor;
                    Session["strObservaciones"] = strObservaciones;

                    Session["strNroPedidoOrigen"] = strNroPedidoOrigen;
                    Session["strNumPedido"] = strNumPedido;

                    Session["dtmFechaPedido"] = dtmFechaPedido;
                    Session["dtmFechaEmbarqueEst"] = dtmFechaEmbarqueEst;
                    Session["dtmFechaEmbarque"] = dtmFechaEmbarque;
                    Session["dtmFechaLLegPuertoEst"] = dtmFechaLLegPuertoEst;
                    Session["dtmFechaLlegPuerto"] = dtmFechaLlegPuerto;
                    Session["dtmFechaLlegAlmacen"] = dtmFechaLlegAlmacen;

                    Session["obtenerDatos"] = 1;
                }
                else if (intTipo == 2)
                {
                    intIdOficinaVenta = (Session["intIdOficinaVenta"] != null) ? Convert.ToInt32(Session["intIdOficinaVenta"]) : intIdOficinaVenta;
                    intIdTipoTransporte = (Session["intIdTipoTransporte"] != null) ? Convert.ToInt32(Session["intIdTipoTransporte"]) : intIdTipoTransporte;
                    intIdProveedor = (Session["intIdProveedor"] != null) ? Convert.ToInt32(Session["intIdProveedor"]) : intIdProveedor;

                    strNroPedidoOrigen = (Session["strNroPedidoOrigen"] != null) ? Session["strNroPedidoOrigen"].ToString() : String.Empty;
                    strNumPedido = (Session["strNumPedido"] != null) ? Session["strNumPedido"].ToString() : String.Empty;
                    strCodProveedor = (Session["strCodProveedor"] != null) ? Session["strCodProveedor"].ToString() : String.Empty;
                    strNomProveedor = (Session["strNomProveedor"] != null) ? Session["strNomProveedor"].ToString() : String.Empty;
                    strObservaciones = (Session["strObservaciones"] != null) ? Session["strObservaciones"].ToString() : String.Empty;

                    dtmFechaPedido = (Session["dtmFechaPedido"] != null) ? Convert.ToDateTime(Session["dtmFechaPedido"]).Date : dtmFechaPedido;
                    dtmFechaEmbarqueEst = (Session["dtmFechaEmbarqueEst"] != null) ? Convert.ToDateTime(Session["dtmFechaEmbarqueEst"]).Date : dtmFechaEmbarqueEst;
                    dtmFechaEmbarque = (Session["dtmFechaEmbarque"] != null) ? Convert.ToDateTime(Session["dtmFechaEmbarque"]).Date : dtmFechaEmbarque;
                    dtmFechaLLegPuertoEst = (Session["dtmFechaLLegPuertoEst"] != null) ? Convert.ToDateTime(Session["dtmFechaLLegPuertoEst"]).Date : dtmFechaLLegPuertoEst;
                    dtmFechaLlegPuerto = (Session["dtmFechaLlegPuerto"] != null) ? Convert.ToDateTime(Session["dtmFechaLlegPuerto"]).Date : dtmFechaLlegPuerto;
                    dtmFechaLlegAlmacen = (Session["dtmFechaLlegAlmacen"] != null) ? Convert.ToDateTime(Session["dtmFechaLlegAlmacen"]).Date : dtmFechaLlegAlmacen;

                    if (intIdOficinaVenta != null) cboOficinaVenta.Value = intIdOficinaVenta.ToString();

                    if (strNroPedidoOrigen != String.Empty) txtNumeroOrigen.Text = strNroPedidoOrigen;
                    if (strNumPedido != String.Empty) txtNumPedido.Text = strNumPedido;

                    if (dtmFechaPedido != null) dtpFechaPed.Value = dtmFechaPedido;

                    if (intIdTipoTransporte != null) cboTipoTransporte.Value = intIdTipoTransporte.ToString();

                    if (dtmFechaEmbarqueEst != null) dtFecha_Embarque_Est.Value = dtmFechaEmbarqueEst;
                    if (dtmFechaEmbarque != null) dtpFechaEmbarque.Value = dtmFechaEmbarque;
                    if (dtmFechaLLegPuertoEst != null) dtpFechaLlegadaEst.Value = dtmFechaLLegPuertoEst;
                    if (dtmFechaLlegPuerto != null) dtFec_LLeg_Puerto.Value = dtmFechaLlegPuerto;
                    if (dtmFechaLlegAlmacen != null) dtFec_lleg_Almacen.Value = dtmFechaLlegAlmacen;

                    if (intIdProveedor != null) txtidProv.Text = intIdProveedor.ToString();
                    if (strCodProveedor != String.Empty) txtcodProv.Text = strCodProveedor;
                    if (strNomProveedor != String.Empty) txtnomProv.Text = strNomProveedor;
                    if (strObservaciones != String.Empty) txtObservaciones.Text = strObservaciones;

                    Session["obtenerDatos"] = 0;
                }
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL OBTENER LOS DATOS";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void btnProvBuscar_Click(object sender, EventArgs e)
        {
            ProveedorBuscar();
        }

        private void ProveedorBuscar()
        {
            try
            {
                String strDesProveedor = txtProvDescrip.Text.Trim();
                int intCantFilas = Convert.ToInt32(cboProvLimite.Value);

                if (strDesProveedor == String.Empty)
                {
                    strMsg = "Debe seleccionar un filtro.";
                    MostrarComentario(strMsg);
                    return;
                }

                lista = new List<Object>();
                lista = new clsTd_ProveedorLogic().listar(strDesProveedor, intCantFilas);

                if (lista == null)
                {
                    strMsg = "No hay datos para la consulta solicitada.";
                    MostrarComentario(strMsg);
                    return;
                }

                grdProveedorImp.DataSource = lista;
                grdProveedorImp.DataBind();

                if (grdProveedorImp.VisibleRowCount == 0)
                {
                    strMsg = "No hay datos para la consulta solicitada.";
                    MostrarComentario(strMsg);
                    return;
                }
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL BUSCAR EL PROVEEDOR";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void btnMostrarDetalleImp_Click(object sender, EventArgs e)
        {
            MostrarDetalleImp();
        }

        private void MostrarDetalleImp()
        {
            try
            {
                if (cboTipoCarga.Value == null) return;
     
                if (Session["strAgregado"] != null && Session["strAgregado"].ToString() == "1")
                {
                    cboTipoCarga.Value = Session["TIPO_PEDIDO_VALUE"].ToString();
                    strMsg = "Debe guardar los registros añadidos.";
                    MostrarComentario(strMsg);
                    return;
                }

                if (Session["operacon"].ToString().Trim() != "1") return;

                String strCodTipoPedido = (cboTipoCarga.SelectedItem.Value != null) ? cboTipoCarga.SelectedItem.Value.ToString() : cboTipoCarga.Value.ToString();
                if (strCodTipoPedido == String.Empty)
                {
                    return;
                }

                //String strNumPedido = Session["NUM_PEDIDO"].ToString().Trim();
                int idCab = Convert.ToInt32(Session["ID_IMP_IMPORTACION_CAB"]);

                //if (!obtenerDatosDet(strNumPedido, strCodTipoPedido)) return;
                if (!obtenerDatosDet(idCab, strCodTipoPedido)) return;

            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL MOSTRAR LOS DETALLES POR TIPO DE CARGA";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private void PasarAModificar()
        {
            try
            {
                listaCargaManual = new List<IMPORTACION_DET>();
                Session["listaCargaManual"] = listaCargaManual;
                CargaManualListado();
                //  cboTipoCarga.Value = "PAC";
                if (Session["operacon"].ToString() == "0")
                {
                    Session["operacon"] = "1";
                    Session["NUM_PEDIDO"] = txtNumPedido.Text;
                }

                MostrarDatosRecuperado();
                Session["CMTipo"] = null;
                ListaDocumentoImportaciones();
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL PASAR A MODIFICAR.";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        //protected void VerPronosticos(object sender, EventArgs e)
        //{
        //    VerPronosticos();
        //}

        private void VerPronosticos()
        {
            try
            {
                lista = new List<Object>();
                ActualizarPedidoLogic actualizapedido = new ActualizarPedidoLogic();
                lista = actualizapedido.listarCabSeguimientoImpPopBuscar2(3);

                if (lista == null)
                {
                    strMsg = "No hay datos para la cabecera del pronostico de importaciones.";
                    MostrarComentario(strMsg);
                    return;
                }

                grdPronostico.DataSource = lista;
                grdPronostico.DataBind();
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL CARGAR LOS PRONOSTICOS";
                strMsg = (ex.InnerException.Message != null) ? ex.InnerException.Message : ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private void MostrarComentario(String strMsg)
        {
            CargarAlert(strMsg, "Mensaje");
        }

        private void MostrarComentario(String strMsg, String strTitulo)
        {
            CargarAlert(strMsg, strTitulo);
        }

        private void CargarAlert(String strMsg, String strTitulo)
        {
            popupErrorNumPedido.HeaderText = strTitulo;
            lblmsj.Text = strMsg;
            popupErrorNumPedido.ShowOnPageLoad = true;
        }

        // Documentos Relacionados

        protected void btnDocNuevo_Click(object sender, EventArgs e)
        {
            try
            {
                PopupDocumento.ShowOnPageLoad = true;
                Session["strGrabDoc"] = "0";
                Session["strAgregarDoc"] = "0";

                txtDRNumeroDocumento.Text = String.Empty;
                cboDRTipoDocumento.Value = null;

                if (txtNumPedido.Text.Trim() == String.Empty)
                {
                    strMsg = "Debe ingresar un numero de pedido.";
                    MostrarComentario(strMsg);
                    return;
                }

                if (Session["operacon"].ToString() == "0")
                {
                    lblDRNumeroPedido.Text = txtNumPedido.Text.Trim();
                }
                else if (Session["operacon"].ToString() == "1")
                {
                    lblDRNumeroPedido.Text = (Session["NUM_PEDIDO"] != null) ? Session["NUM_PEDIDO"].ToString() : String.Empty;
                }

                lblDROrgVta.Text = (Session["DES_ORG_VTA"] != null) ? Session["DES_ORG_VTA"].ToString() : String.Empty;
                ListaTipoDocumentoImportaciones();
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL ABRIR UN NUEVO REGISTRO";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private void ListaDocumentoImportaciones()
        {
            int? intIdOrg = null;

            intIdOrg = (Session["ID_ORG_VTA"] != null) ? Convert.ToInt32(Session["ID_ORG_VTA"]) : intIdOrg;

            if (intIdOrg == null)
            {
                strMsg = "No ha seleccionado una organizacion de venta.";
                MostrarComentario(strMsg);
                return;
            }

            if (txtNumPedido.Text.Trim() == String.Empty)
            {
                strMsg = "Debe ingresar un numero de pedido.";
                MostrarComentario(strMsg);
                return;
            }

            String strNumPedido = String.Empty;

            if (Session["operacon"].ToString() == "0")
            {
                strNumPedido = txtNumPedido.Text.Trim();
            }
            else if (Session["operacon"].ToString() == "1")
            {
                strNumPedido = (Session["NUM_PEDIDO"] != null) ? Session["NUM_PEDIDO"].ToString() : String.Empty;
            }
            listaCargaDoc = (Session["listaCargaDoc"] != null) ? (List<IMPORTACIONES_DOC_RELACIONADOS>)Session["listaCargaDoc"] : new List<IMPORTACIONES_DOC_RELACIONADOS>();

            if (listaCargaDoc == null || listaCargaDoc.Count() == 0)
            {
                listaCargaDoc = new List<IMPORTACIONES_DOC_RELACIONADOS>();
                listaCargaDoc = new clsT_Imp_Importaciones_Doc_RelacionadosLogic().ListarDocumentos(Convert.ToInt32(intIdOrg), Convert.ToInt32(Session["ID_IMP_IMPORTACION_CAB"]));
            }

            if (listaCargaDoc == null) return;

            Session["listaCargaDoc"] = listaCargaDoc;

        }

        private void ListaTipoDocumentoImportaciones()
        {
            try
            {
                lista = new List<Object>();
                lista = new clsT_Imp_Importaciones_Doc_RelacionadosLogic().listaTipoDocumento();

                if (lista == null)
                {
                    strMsg = "No existen datos para el tipo de documento.";
                    MostrarComentario(strMsg);
                    return;
                }

                cboDRTipoDocumento.DataSource = lista;
                cboDRTipoDocumento.TextField = "DES_LARGA";
                cboDRTipoDocumento.ValueField = "ID_GENERAL_DET";
                cboDRTipoDocumento.DataBind();

            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL CARGAR EL TIPO DE DOCUMENTO.";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }


        protected void btnDocModificar_Click(object sender, EventArgs e)
        {
            DocRelacModificar();
        }

        private void DocRelacModificar()
        {
            try
            {
                int intIndex = grdListaDocumentosImportaciones.FocusedRowIndex;
                if (intIndex == -1)
                {
                    strMsg = "Debe seleccionar un documento a modificar.";
                    MostrarComentario(strMsg);
                    return;
                }

                int? intIdTipo = null;
                long? lngNroDoc = null;
                String strOrgVta, strNumPedido;

                ListaTipoDocumentoImportaciones();

                listaCargaDoc = (Session["listaCargaDoc"] != null) ? (List<IMPORTACIONES_DOC_RELACIONADOS>)Session["listaCargaDoc"] : new List<IMPORTACIONES_DOC_RELACIONADOS>();
                strOrgVta = listaCargaDoc[intIndex].DES_ORG_VTA;
                strNumPedido = listaCargaDoc[intIndex].NUM_PEDIDO;
                intIdTipo = listaCargaDoc[intIndex].ID_TIPO_DOC_SEG;
                lngNroDoc = listaCargaDoc[intIndex].COD_NRO_DOCUMENTO;

                lblDROrgVta.Text = strOrgVta;
                lblDRNumeroPedido.Text = strNumPedido;
                cboDRTipoDocumento.Value = intIdTipo.ToString();
                txtDRNumeroDocumento.Text = lngNroDoc.ToString();

                PopupDocumento.ShowOnPageLoad = true;
                Session["strGrabDoc"] = "1";
                Session["intIndex"] = intIndex;
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL MODIFICAR EL DOCUMENTO";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void grdListaDocumentosImportaciones_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            DocumentosRelacionadosListado();
        }

        private Boolean ValidarCamposDocImp()
        {
            Boolean boolValidarCamposDocImp = true;
            try
            {
                long lngNroDoc;
                if (cboDRTipoDocumento.Value == null)
                {
                    boolValidarCamposDocImp = false;
                    strMsg = "Debe seleccionar un tipo de documento.";
                }
                else if (txtDRNumeroDocumento.Text.Trim() == String.Empty)
                {
                    boolValidarCamposDocImp = false;
                    strMsg = "Debe ingresar un numero de documento.";
                }
                else if (!long.TryParse(txtDRNumeroDocumento.Text.Trim(), out lngNroDoc))
                {
                    boolValidarCamposDocImp = false;
                    strMsg = "El numero de documento debe ser numerico.";
                }
            }
            catch (Exception ex)
            {
                boolValidarCamposDocImp = false;
                strMsg = ex.Message;
            }
            if (!boolValidarCamposDocImp)
            {
                PopupDocumento.ShowOnPageLoad = true;
                strTitulo = "ERROR AL VALIDAR LOS CAMPOS DEL DOCUMENTO";
                MostrarComentario(strMsg, strTitulo);
            }
            return boolValidarCamposDocImp;
        }

        protected void btnDocEliminar_Click(object sender, EventArgs e)
        {
            DocRelacEliminar();
        }

        private void DocRelacEliminar()
        {
            try
            {
                int intIndex = grdListaDocumentosImportaciones.FocusedRowIndex;
                if (intIndex == -1)
                {
                    strMsg = "Debe seleccionar un documento a eliminar.";
                    MostrarComentario(strMsg);
                    return;
                }

                listaCargaDoc = (Session["listaCargaDoc"] != null) ? (List<IMPORTACIONES_DOC_RELACIONADOS>)Session["listaCargaDoc"] : new List<IMPORTACIONES_DOC_RELACIONADOS>();
                listaCargaDoc.RemoveAt(intIndex);

                grdListaDocumentosImportaciones.DataSource = listaCargaDoc;
                grdListaDocumentosImportaciones.DataBind();
                Session["listaCargaDoc"] = listaCargaDoc;
                //**************************************
                Session["strAgregarDoc"] = 1;
                //**************************************
                //DocumentosRelacionadosListado();
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL ELIMINAR EL DOCUMENTO";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void btnPopDocAgregar_Click(object sender, EventArgs e)
        {
            DocumentosRelacionadosAgregar();
        }

        private void DocumentosRelacionadosAgregar()
        {
            try
            {
                PopupDocumento.ShowOnPageLoad = false;
                if (!ValidarCamposDocImp()) return;
                if (!DocRelacAgregar()) return;
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL AGREGAR EL DOCUMENTO";
                PopupDocumento.ShowOnPageLoad = true;
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private Boolean DocRelacAgregar()
        {
            Boolean boolDocRelacAgregar = true;
            try
            {
                int? intIdTipoDoc = null, intIdImpRelacion = null;
                String strNumPedido = String.Empty, strDesOrg = String.Empty, strDesTipo = String.Empty;
                long lngNroDoc;

                strDesOrg = (Session["DES_ORG_VTA"] != null) ? Session["DES_ORG_VTA"].ToString() : strDesOrg;

                if (Session["operacon"].ToString() == "0")
                {
                    strNumPedido = txtNumPedido.Text.Trim();
                }
                else if (Session["operacon"].ToString() == "1")
                {
                    strNumPedido = (Session["NUM_PEDIDO"] != null) ? Session["NUM_PEDIDO"].ToString() : String.Empty;
                }

                intIdTipoDoc = (cboDRTipoDocumento.Value) != null ? Convert.ToInt32(cboDRTipoDocumento.Value) : Convert.ToInt32(cboDRTipoDocumento.SelectedItem.Value);
                lngNroDoc = (txtDRNumeroDocumento.Text.Trim() != String.Empty) ? Convert.ToInt64(txtDRNumeroDocumento.Text.Trim()) : 0;

                strDesTipo = cboDRTipoDocumento.Text.Trim();

                objIDR = new IMPORTACIONES_DOC_RELACIONADOS();
                objIDR.ID_T_IMPORTACIONES_RELACION = intIdImpRelacion;
                objIDR.NUM_PEDIDO = strNumPedido;
                objIDR.DES_ORG_VTA = strDesOrg;
                objIDR.COD_NRO_DOCUMENTO = lngNroDoc;
                objIDR.DES_LARGA = strDesTipo;
                objIDR.ID_TIPO_DOC_SEG = intIdTipoDoc;

                listaCargaDoc = (Session["listaCargaDoc"] != null) ? (List<IMPORTACIONES_DOC_RELACIONADOS>)Session["listaCargaDoc"] : new List<IMPORTACIONES_DOC_RELACIONADOS>();
                if (Session["strGrabDoc"].ToString() == "0")
                {
                    listaCargaDoc.Add(objIDR);
                }
                else if (Session["strGrabDoc"].ToString() == "1")
                {
                    int intIndex = Convert.ToInt32(Session["intIndex"]);
                    listaCargaDoc[intIndex] = objIDR;
                    Session["intIndex"] = null;
                }
                cboDRTipoDocumento.Value = null;
                txtDRNumeroDocumento.Text = String.Empty;
                Session["listaCargaDoc"] = listaCargaDoc;
                Session["strAgregarDoc"] = "1";
                DocumentosRelacionadosListado();
            }
            catch (Exception ex)
            {
                boolDocRelacAgregar = false;
                strMsg = ex.Message;
            }

            if (!boolDocRelacAgregar)
            {
                PopupDocumento.ShowOnPageLoad = true;
                strTitulo = "ERROR AL AGREGAR EL DOCUMENTO";
                MostrarComentario(strMsg, strTitulo);
            }
            return boolDocRelacAgregar;
        }

        private void DocumentosRelacionadosListado()
        {
            try
            {
                listaCargaDoc = (Session["listaCargaDoc"] != null) ? (List<IMPORTACIONES_DOC_RELACIONADOS>)Session["listaCargaDoc"] : new List<IMPORTACIONES_DOC_RELACIONADOS>();
                if (listaCargaDoc == null) return;

                grdListaDocumentosImportaciones.DataSource = listaCargaDoc;
                grdListaDocumentosImportaciones.DataBind();

            }
            catch (Exception ex)
            {
                strTitulo = "";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void grdListaDocumentosImportaciones_PageIndexChanged(object sender, EventArgs e)
        {
            DocumentosRelacionadosListado();
        }

        protected void btnCargaAgregar_Click(object sender, EventArgs e)
        {
            try
            {
                TipoCarga(2);
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL AGREGAR LOS DATOS";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        protected void btnCargaReemplazar_Click(object sender, EventArgs e)
        {
            try
            {
                TipoCarga(1);
            }
            catch (Exception ex)
            {
                strTitulo = "ERROR AL REEMPLAZAR LOS DATOS";
                strMsg = ex.Message;
                MostrarComentario(strMsg, strTitulo);
            }
        }

        private void TipoCarga(int? intTipo)
        {
            if (RutaExcel.Length == 0)
            {
                pcImpExcel.ShowOnPageLoad = true;
                strMsg = "Debe seleccionar un archivo a importar.";
                MostrarComentario(strMsg);
                return;
            }
            pcImpExcel.ShowOnPageLoad = false;
            pcCarga.ShowOnPageLoad = false;
            cargar_Grid2(RutaExcel, intTipo);
        }

        protected void btnPRNBuscar_Click(object sender, EventArgs e)
        {
            //ListarPronosticos();
        }


        protected void btnPRNAgregar_Click(object sender, EventArgs e)
        {
            Cargar_Externo(2);
        }

        protected void btnPRNReemplazar_Click(object sender, EventArgs e)
        {
            Cargar_Externo(1);
        }

        protected void ASPxButton7_Click(object sender, EventArgs e)
        {
            VerPronosticos();
        }

        protected void btnDetalle_Click(object sender, EventArgs e)
        {
            if (tmpArticulosNoInsertados.Count > 0)
            {
                grdDatosNoRegistrados.DataSource = tmpArticulosNoInsertados;
                grdDatosNoRegistrados.DataBind();
            }
            gvExporterArticulosNoRegistrados.WriteXlsToResponse();
        }

        protected void grdPronostico_PageIndexChanged(object sender, EventArgs e)
        {
            VerPronosticos();
        }

        protected void btnExportar_Click(object sender, EventArgs e)
        {
         
        }

        protected void btnExportar3_Click(object sender, EventArgs e)
        {
            this.CargaManualListado();
            gvExportarDetalleImportacion.WriteXlsxToResponse();
        }

    }
}